/*
  新增五个新功能
  * Object.values，遍历对象的所有值
  * Object.entries，将数组的键值对以数组形式返回，从而可以用for of来遍历
  * Object.getOwnPropertyDescriptors，可以复制Object.assign不能复制的对象中的getter和setter，Object.assign
  * String.prototype.padStart / String.prototype.padEnd 字符串填充
  * 在函数的参数中添加尾逗号
*/

// Object.values Object.entries
const obj = {
  a: 1,
  b: 2,
  get sum () {
    return this.a + this.b
  }
}
console.log(Object.values(obj))
console.log(Object.entries(obj))
console.log(new Map(Object.entries(obj)))

// Object.getOwnPropertyDescriptors
const obj1 = Object.assign({}, obj)
obj1.a = 3
console.log(obj1.sum)
const desc = Object.getOwnPropertyDescriptors(obj)
const obj2 = Object.defineProperties({}, desc)
obj2.a = 3
console.log(obj2.sum)

// String.prototype.padStart / String.prototype.padEnd 
const books = {
  html: 5,
  css: 16,
  javascript: 128
}

for (const [key, val] of Object.entries(books)) {
  console.log(`${key.padEnd(16, '-')}|${val.toString().padStart(3, '0')}`)
}

// 在函数的参数中添加尾逗号
function foo (
  a,
  b,
) {}

